/*
 * Create in 2013-4-20 上午11:29:27.
 */
package kit4j.app.notepad.command;

import kit4j.common.command.FullCommand;

/**
 * 
 * @author MiniKnife
 *
 */
public interface NotepadCommandExecutor {

	/**
	 * 在未来某个时间执行给定的命令。该命令可能在新的线程、已入池的线程或者正调用的线程中执行，这由<code>FullCommandExecutor</code>实现决定。
	 * 
	 * @param cmd
	 *            可运行的命令
	 * @throws Exception
	 *             如果给定的命令执行过程中出现异常。
	 */
	void execute(FullCommand cmd);

	/**
	 * 在未来某个时间撤销给定的命令。该命令可能在新的线程、已入池的线程或者正调用的线程中进行撤销，这由<code>FullCommandExecutor</code>实现决定。
	 * 
	 * @param cmd
	 *            可撤销的命令
	 * @throws Exception
	 *             如果给定的命令撤销过程中出现异常。
	 */
	void undo(FullCommand cmd);

	/**
	 * 在未来某个时间重新执行给定的命令。该命令可能在新的线程、已入池的线程或者正调用的线程中重新执行，这由<code>FullCommandExecutor</code>实现决定。
	 * 
	 * @param cmd
	 *            可重新执行的命令
	 * @throws Exception
	 *             如果给定的命令重新执行过程中出现异常。
	 */
	void redo(FullCommand cmd);
}
